fix(ci): remove the unrunnable SonarCloud step breaking Governance + CodeQL - #139
Merged
Conversation
…CodeQL
`SonarSource/sonarqube-scan-action@master` was appended to four workflows by
a sweep. The root copy is live and breaks CI two different ways:
- governance / Workflow security linter
ERROR: Found unpinned actions:
.github/workflows/codeql.yml:58: uses: SonarSource/sonarqube-scan-action@master
- CodeQL Security Analysis
##[error]The action sonarsource/sonarqube-scan-action@master is not
allowed in hyperpolymath/maa-framework because all actions must be
pinned to a full-length commit SHA.
The second is a *startup* rejection by the org ruleset, so the analyze job
died with zero steps — no lint-shaped error, and no check run to inspect.
Removed rather than pinned, because pinning alone cannot make it work:
- no `SONAR_TOKEN` secret exists on this repo (verified via `gh secret list`)
- no sonar-project.properties / sonar config anywhere in the tree
- the step carries no `with:` or `env:`, so it has no project key or org
- it was appended *inside the CodeQL matrix job*, so it would run once per
language, and in two files it was jammed between a step and the next job
key with no blank line
Pinning it would have swapped a pin error for an auth error and left main red.
Also removes the three copies under aletheia/ — those workflows are inert
(Actions reads .github/workflows/ at the repo root only), but leaving them
would re-introduce the defect the moment anyone promotes one to the root.
Restores the trailing newlines the sweep dropped.
To adopt SonarCloud properly later: one root workflow only, pinned to a SHA,
with SONAR_TOKEN wired and a sonar-project.properties committed.
Verified: all four files parse (`yq`); job keys intact (test/security/coverage,
check/test/build/self-verify); both governance linter checks pass locally.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
hyperpolymath
marked this pull request as ready for review
July 27, 2026 13:32
hyperpolymath
added a commit
that referenced
this pull request
Jul 28, 2026
…ch the code (#144) Three independent commits, each droppable on its own. Two fix gates that could never fail; one fixes documentation that actively misdirects. --- ## 1. `docs:` — two files misstate the code they describe ### `PROOF-NEEDS.md` Claimed *"1 `Admitted` in `proofs/coq/lambda/LambdaCNO.v` (y_not_cno)"*. Measured against `absolute-zero 87902bb7`: ``` $ grep -rn "Admitted" absolute-zero --include=*.v | wc -l 0 $ grep -rn "^Axiom" absolute-zero --include=*.v | wc -l 23 ``` **Zero `Admitted`. Twenty-three `Axiom`s across 6 files.** The old wording was wrong in *both* directions — it overstated the incompleteness and understated the trusted base 23×. > **Why this matters operationally:** an `Axiom` **passes** a "no `sorry` / no `Admitted`" gate silently. Counting only `Admitted` measures the wrong thing. `y_not_cno` is a **KEPT AXIOM** with a written rationale (`LambdaCNO.v:388-399`), not an unproven hole — and it is *not* the "concrete, closable proof obligation" the old text claimed. The in-source note explains it needs an invariant closed under the full reduction congruence, or a coinductive/step-indexed argument. The doc now defers to the **AXIOM AUDIT** already in `physics/LandauerDerivation.v`, which is notably self-critical — it records that `cno_zero_energy_dissipation_derived` is an axiom *despite its `_derived` name*, and that the triage docs' "DISCHARGE" marks are inaccurate. **Promoted to the top of "What Needs Proving"** — the audit's own SOUNDNESS WARNINGS: `prob_nonneg` and `prob_normalized` are false over unconstrained function-type distributions, and `shannon_entropy_maximum`'s inequality is **backwards** (asserts uniform *minimises* entropy). All three are currently **unused** — cheap now, expensive later. ### `aletheia/CLAUDE.md` Said *"all core logic lives in `src/main.rs` (~950 lines)"* and *"don't split into modules unless >1000 lines"*. It has been **5 modules / 995 lines** for a while, `main.rs` at 121. That instruction would tell the next agent to **undo the existing structure**. Also corrected: 23 workflows → 16; `flake.nix` listed but absent; 18 integration tests → 32. Added a prominent warning that those 16 nested workflows have **never run** (root-only discovery) — the fault that let this crate stay uncompilable for a month. --- ## 2. `fix(aletheia):` — the SHA-pinning check could never fail ```rust if line.contains("@v") && !line.contains("@") { ``` `contains("@v")` **implies** `contains("@")`, so the second clause is always false and `has_unpinned` could never be set. Proven before changing anything: ``` uses: actions/checkout@v4 old_detects_unpinned=false ``` This is aletheia's Silver-level *"GitHub Actions SHA pinning"* check — and pointedly, the exact check that would have caught `SonarSource/sonarqube-scan-action@master`, the unpinned action that broke this repo's Governance and CodeQL in #139. Replaced with `uses_line_is_pinned`, requiring 40 hex chars after the final `@`, which also: - accepts the inline `- uses:` form (the estate's existing linter anchors to line-start and misses it) - ignores a trailing `# v7.0.1` provenance comment, so a correct pin with a stale comment isn't a false positive - exempts `./…` local actions/reusables and `docker://` refs Also replaced `assert!(true)` in `test_file_exists` with a real assertion, anchored on `env!("CARGO_MANIFEST_DIR")` so it is deterministic regardless of CWD. **Verified:** 29 unit tests (was 26) · `cargo fmt --check` clean · clippy 25 → 23. End-to-end `cargo run -- .` now reports `[FAIL] GitHub Actions SHA pinning`, correctly finding the one genuinely unpinned action — where before the fix it reported a pass. Refs #125. --- ## 3. `fix(#99):` — root `Justfile` was a fake gate ```make build: @echo "Build not configured yet" ``` `build`, `test`, `fmt`, `lint`, `clean` all printed a string and **exited 0**. Wired to the same commands root `rust-ci.yml` runs, in the same order, so `just check` means what CI means. Two deliberate limits, documented **in the recipes** so nobody "fixes" them: - `test` is `--bins` only — the integration suite is a spec for a CLI that doesn't exist; 27/29 fail by design (#124). Adding `--tests` would make the bar green by breaking it. - `lint` is not yet `-D warnings` (#125). When that closes it must be added **here and to `rust-ci.yml` together**, so local and CI never disagree. **Verified by running them, not reading them:** `just deps-check` → `OK: zero dependencies`; `just test` → 29 passed; `just check` → exit 0. **And verified the gate can actually fail** — appending badly-formatted Rust makes `just fmt` exit 1 while `just build` still exits 0; reverting restores 0. A gate nobody has watched fail is not a gate. Closes #99. --- ## Not in this PR - **#124** — still blocked on the source-of-truth question for RSR checks - **`guix.scm`** identity/licence clobber — separate, more urgent: #143 🤖 Generated with [Claude Code](https://claude.com/claude-code) --------- Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What
Removes
SonarSource/sonarqube-scan-action@masterfrom four workflows. This single unpinned action is the sole cause of both remaining red checks onmain.Why both checks are red
governance / Workflow security linterERROR: Found unpinned actions:.github/workflows/codeql.yml:58: uses: SonarSource/sonarqube-scan-action@masterCodeQL Security Analysis##[error]The action sonarsource/sonarqube-scan-action@master is not allowed in hyperpolymath/maa-framework because all actions must be pinned to a full-length commit SHA.The CodeQL one is a startup rejection by the org ruleset — the
analyzejob died with zero steps executed. No lint-shaped error, and nothing useful ingh pr checks.Why removed, not pinned
Pinning alone cannot make this step work. Measured:
SONAR_TOKENsecret on this repo (gh secret list— 8 secrets, none is Sonar)git ls-tree -r origin/main | grep -i sonar→ empty)with:orenv:on the step, so no project key and no organizationPinning would have swapped a pinning error for an auth error and left
mainred.Scope
.github/workflows/codeql.ymlaletheia/.github/workflows/codeql.ymlaletheia/.github/workflows/rust-ci.ymlaletheia/extraction/rhodibot/.github/workflows/ci.ymlThe three
aletheia/copies are inert because Actions reads.github/workflows/at the repository root only — that subtree has never executed. They are removed anyway so the defect cannot return the moment anyone promotes one of those files to the root. Trailing newlines the sweep dropped are also restored.Verification
yq eval '.jobs | keys'test,security,coverageandcheck,test,build,self-verifyAll actions are SHA-pinned+All workflows have SPDX headers + permissionsAdopting SonarCloud properly later
One root workflow only, pinned to a SHA, with
SONAR_TOKENwired and asonar-project.propertiescommitted. Note the estate finding that a minted repo'ssonar.projectKeycan still point at the template's Sonar project.Not in this PR
squisher-corpusguix.scmclobber — not onorigin/main;origin/main's copy is correct. Local-only, handled separately.🤖 Generated with Claude Code